home *** CD-ROM | disk | FTP | other *** search
- ;Programm: BangerMenu bietet eine grafische Oberfläche zum Anwählen von Programmen
- ; die beim Starten in der Startup-Sequence aufgerufen werden sollen.
- ;Autor : Andre´ Trettin
- ;Codename: Banger
- ;Begin : 31-Mai-95 17:08:28
- ;$VER : BangerMenu.Asm 3.3 (4-Sep-96)
-
- ** INCLUDE Struktur Variablen
- * Fehler Codes: 21=kein Speicher
- * 22=konnte Library (oder Libraries) nicht öffnen
- * 23=GetVisualInfo Fehler
- * 24=konnte File S:BangerMenu.Prefs nicht öffnen
- * 25=bei der Gadgeterschaffung trat ein Fehler auf
- * 26=konnte Fenster nicht öffnen oder Task nicht Finden
- * 27=Einstellungen sind Leer
- * 28=kein Speicher für die Einstellungen
- * 29=kein MsgPort
- * 30=konnte kein IORequest create
- * 31=konnte Device nicht öffnen
- * 32=falsche Parameter angabe
- * 33=zu viele Gadget (>2560)
- * 34=konnte MonitorTreiber Datei nicht laden
- * 35=Monitor mit angebenen ID nicht gefunden
- * 36=konnte Screen nicht öffnen
- * 37=Fehler im Einstellungsfile
- * 38=Menu Fehler
- * 10=Return Code für die Startup-Sequence
-
- incdir INCLUDE:
- include exec/exec.i
- include exec/io.i
- include devices/input.i
- include devices/inputevent.i
- include dos/dos.i
- include dos/dosextens.i
- include dos/dostags.i
- include intuition/intuition.i
- include libraries/gadtools.i
- include lvo/exec_lib.i
- include lvo/dos_lib.i
- include lvo/intuition_lib.i
- include lvo/gadtools_lib.i
- include lvo/graphics_lib.i
- include lvo/input_lib.i
-
- STRUCTURE BangerMenu,0
- APTR BaM_MenuTitleText
- APTR BaM_MenuKey
- STRUCT BaM_SpaltenTitleText,[50*4]
- STRUCT BaM_SpaltenLaenge,[50]
- STRUCT BaM_GadgetLaenge,[50]
- BYTE BaM_SpaltenAnzahl
- BYTE BaM_SeitenAnzahl
- WORD BaM_GadgetAnzahl
- LABEL BaM_SIZEOF
-
- STRUCTURE Internal,0
- APTR INTUIBase ;Intuition Lib. Addr.
- APTR DOSBase ;Dos Lib. Addr.
- APTR GADBase ;GadTools Lib. Addr.
- APTR GFXBase ;Graphics Lib. Addr.
- APTR WindowHandle ;Fenster Addr.
- APTR ScreenHandle ;ScreenAddr.
- APTR VisualInfo ;VisualInfo Addr.
- APTR WinRPort ;Window RasrPort Addr.
- APTR PrefsFileHandle ;File Addr.
- APTR FileSpeicher ;File Speicher
- APTR FontAddr ;TextAttr-Struktur
- APTR meinTask ;Task Addr.
- APTR alterTask ;alter Task Addr.
- APTR AnGad ;Angewählte Gadget Addr.
- APTR MsgPortAddr ;Addr. des Message Port
- APTR PrefsLoadKey ;Para: PrefsFilename
- APTR MonitorKey ;Para: MonitorTreiber
- APTR MoniID ;Para: MonitorID Nr.
- APTR NOKEYArray ;Para: NOKEY
- APTR RDArgs ;Resultat von ReadArgs/dos
- APTR MenuPtr ;Menu Addr
- APTR PrintMarkTab ;Text Marker für die Seiten beim erstellen
- APTR ProgrammDir ;aktuelles Verzeichnis des Auszuführenden Prog.
- APTR AltesDir ;altes Verzeichnis
- STRUCT FIB,[fib_SIZEOF] ;FIB=FileInfoBlock Struktur
- STRUCT TastenIBlock,[IO_SIZE] ;Addr. IORequest
- STRUCT MenuData,[BaM_SIZEOF*50] ;Daten des BangerMenu aufbau
- STRUCT PrintData,[it_SIZEOF*20] ;IntuiText Struktur für die Textausgabe der SpaltenTitle
- STRUCT VirtualMenu,[gnm_SIZEOF*55] ;unabhängiges ScreenMenu
- STRUCT GadgetAddr,[2600*4] ;Alle GadgetsAddressen max 2600
- STRUCT GadgetListe,[11*4] ;Einzelnen GadgetListe (Window)
- STRUCT PageLAddr,[11*4] ;eine Seite zurück
- STRUCT PageRAddr,[11*4] ;eine Seite vor
- STRUCT GadgetPage,[11*4] ;Gadgetanfang einer Seite
- STRUCT PrintPage,[11*4] ;PrintIText Addr
- LONG Filegroesse ;Filegröße
- WORD HoeheWin ;Fenster Höhe
- WORD BreiteWin ;Fenster Breite
- WORD AlteHoeheWin ;Alte Fenster Höhe
- WORD AlteBreiteWin ;Alte Fenster Breite
- WORD SCHoehe ;Screen Höhe
- WORD SCBreite ;Screen Breite
- WORD AnPage ;Momentaniges Angewählte Seite
- WORD MaxSpaltenZahl ;Max. Anzahl in einer Spalte
- WORD JetztigeSeite ;GadgetAnzahl der jetzigen Seite
- WORD VorigeSeitenLaenge ;Vorige Seiten GadgetAnzahl
- WORD LetzteSPLaenge ;Letzte Spalten Länge
- WORD ErsteSPLaenge ;ErsteSpaltenLänge
- WORD VorigeSPLaenge ;VorigeSpaltenLänge
- WORD JetztigeSPLaenge ;JetzigeSpaltenLänge
- WORD NaechsteSPLaenge ;NächsteSpaltenLänge
- WORD RelativeGDPos ;GadgetPostion in der Spalte
- BYTE VorigeSPSeiten ;keine Neue Seite bei voriger Spalte
- BYTE NaechsteSPSeiten ;keine Neue Seite bei nächster Spalte
- BYTE TextUOFlag ;Spalte-Text unter/ober Flag
- BYTE SpalteOhneTitle ;Spalte Ohne Titel
- BYTE MenuEintragAnzahl ;Anzahl der Menu Einträge im Screen-Menu
- BYTE ZweitePage ;Zweite Seite Vorhanden
- BYTE ScreenSignal ;SignalNr
- BYTE RelativeTopC ;Relative Ecke von Oben
- BYTE RelativeLeftC ;Relative Ecke von Links
- BYTE MenuAnGe ;Momentaniges Angewähltes Menu
- LABEL Int_SIZEOF
- ;;
- ** Hauptprog
- moveq #0,d7 ;Error Code = 0
- move.l 4.w,a6 ;EXECBase
- move.l #Int_SIZEOF,d0 ;Internal-Struktur
- move.l #MEMF_PUBLIC!MEMF_CLEAR,d1 ;Speicher Type: zuerst FAST MEM
- jsr _LVOAllocMem(a6) ;Speicher für Variablen reservieren
- move.l d0,a5 ;a5 Basis Addr. für alle Variablen
- bne.s LibraryO ;Speicher OK!
- moveq #21,d7 ;21 = kein Speicher
- bra.w Ende ;beenden
- LibraryO
- bsr.w InitRelative ;Init Relative (kein Reloc Tabelle)
- bsr.w LibOeffne ;Libraries öffnen
- tst.w d7 ;Fehler Code 0=OK
- bne.w SchliesseLibrary ;Error Beende
- bsr.w Parameter ;Parameter abfragen
- tst.w d7 ;Parameter fehler
- bne.s SchliesseLibrary ;Schliesse Libraries
- bsr.w WaitOnCaps ;CAPS-Lock Abfrage
- cmp.w #10,d7 ;Error wenn d7>10
- bhi.s ParameterFree ;Ende wegen Error
- tst.w d7 ;d7=0
- beq.s Menuerscheine ;BangerMenu Start
- moveq #0,d7 ;kein Fehler trotzdem Ende
- bra.s ParameterFree
- Menuerscheine
- bsr.w PubScreenOeffne ;Öffne Screen
- tst.w d7 ;Fehler beim Screen Öffnen
- bne.s ParameterFree ;gebe Parameter frei
- bsr.w LadePrefs ;Lade Prefs
- tst.w d7 ;Fehler beim Laden des Prefs Files?
- bne.s SchliesseScreen ;JA Schliesse Screen
- bsr.w WertePrefsAus ;Prefs Auswerten
- tst.w d7 ;Prefs Fehler
- bne.s FreiSPrefs ;Speicher Frei vom PrefsFile
- bsr.b InitMenu ;Screen Menu Init
- tst.b d7 ;Fehler im Menu
- bne.s MenuRemove ;Entferne Menu
- bsr.w InitGadget ;Gadget Init
- tst.w d7 ;Fehler beim Gadget erschaffen ?
- bne.s MenuRemove ;Entferne Menus
- bsr.w FensterOeffne ;Fenster öffenen
- tst.w d7 ;Fehler beim Fenster Öffnen
- bne.s RemGad ;Entferne Gadgets
- bsr.w SetAndLayout ;Menu aufbau
- tst.b d7
- bne.s SchliesseFenster ;Schliesse Fenster
- move.w #0,d5 ;erstes Menu
- bsr.w PrintIUnter ;Text Ausgabe
- bsr.w GadAktivieren ;erstes Gadget aktivieren
- bsr.w RefreshWin ;Fenster neuaufbau
- bsr.w MessageAbFragen ;Fenster verwaltung
- bsr.w ClearMenu ;Entferne Menu
- SchliesseFenster
- bsr.w FensterSchliesse ;Schliesse Fenster
- RemGad
- bsr.w RemoveGadget ;Entferne Gadgets
- MenuRemove
- bsr.w RemoveMenu ;Entferne Menu
- FreiSPrefs
- bsr.w SpeicherPrefs ;Speicher vom Prefs File freigeben
- SchliesseScreen
- bsr.w ScreenSchliesse ;Schliesse Screen
- ParameterFree
- bsr.w FreePara ;Read Args wieder freigeben
- SchliesseLibrary
- bsr.w LibSchliesse ;schliesse Libraries
- move.l a5,a1 ;Speicher Addr.
- move.l #Int_SIZEOF,d0 ;Größe
- jsr _LVOFreeMem(a6) ;Speicher freigeben
- Ende
- move.l d7,d0 ;Error Code
- ende
- rts ;Ende
- ;;
- ** InitMenu
- InitMenu
- lea UniGad(pc),a1 ;Universal NewGadget Struktur
- move.b RelativeTopC(a5),d4 ;Relative Ecke Oben
- move.b RelativeLeftC(a5),d5 ;Relative Ecke Links
- add.b d4,gng_TopEdge+1(a1) ;Eintrag in die NewGadget Struktur
- add.b d5,gng_LeftEdge+1(a1) ;Eintrag in die NewGadget Struktur
- move.l VisualInfo(a5),gng_VisualInfo(a1) ;VisualInfo eintrag
- move.l FontAddr(a5),gng_TextAttr(a1) ;TextAttr Struktur eintrag
- lea PageGads(pc),a1 ;Seiten umblätter Gadgets
- add.b d4,gng_TopEdge+1(a1) ;Init
- add.b d5,gng_LeftEdge+1(a1)
- move.l VisualInfo(a5),gng_VisualInfo(a1)
- move.l FontAddr(a5),gng_TextAttr(a1)
- lea PageLeftTxt(pc),a2 ;TextString eintrag
- move.l a2,gng_GadgetText(a1)
- lea Page2Gads(pc),a1 ;Zweites Seiten umblätter Gadget
- add.b d4,gng_TopEdge+1(a1)
- add.b d5,gng_LeftEdge+1(a1)
- move.l VisualInfo(a5),gng_VisualInfo(a1)
- move.l FontAddr(a5),gng_TextAttr(a1)
- lea PageRightTxt(pc),a2
- move.l a2,gng_GadgetText(a1)
- lea VirtualMenu(a5),a0 ;unabhängiges Screen Menu
- move.b #NM_TITLE,gnm_Type(a0) ;Titel
- lea ProjektName(pc),a1 ;Projekt String
- move.l a1,gnm_Label(a0)
- lea gnm_SIZEOF(a0),a0 ;Vorspringen
- move.b #NM_ITEM,gnm_Type(a0) ;Über
- lea InfoName(pc),a1 ;Über String
- move.l a1,gnm_Label(a0)
- lea InfoTaste(pc),a1 ;Über Taste
- move.l a1,gnm_CommKey(a0)
- lea gnm_SIZEOF(a0),a0
- move.b #NM_ITEM,gnm_Type(a0) ;Beenden
- lea QuitName(pc),a1 ;Beenden String
- move.l a1,gnm_Label(a0)
- lea QuitTaste(pc),a1 ;Beenden Taste
- move.l a1,gnm_CommKey(a0)
- move.b MenuEintragAnzahl(a5),d0 ;Screen Menu Anzahl
- tst.b d0
- beq.s keinGrossesMenu ;gar kein UserMenu
- lea gnm_SIZEOF(a0),a0
- move.b #NM_TITLE,gnm_Type(a0) ;BangerMenu
- lea WindowTitle(pc),a1 ;BangerMenu String
- move.l a1,gnm_Label(a0)
- subq #1,d0
- lea MenuData(a5),a1 ;BangerMenu Daten
- MenuInitLoop
- lea gnm_SIZEOF(a0),a0 ;Vorspringen zum nächsten Menu
- move.b #NM_ITEM,gnm_Type(a0) ;Titel
- move.l BaM_MenuTitleText(a1),gnm_Label(a0) ;Titel String
- move.l BaM_MenuKey(a1),gnm_CommKey(a0) ;Menu Taste
- lea BaM_SIZEOF(a1),a1 ;BangerMenu Struktur vorspringen zum nächsten
- dbra d0,MenuInitLoop
- keinGrossesMenu
- move.l GADBase(a5),a6 ;GadTools Base
- lea VirtualMenu(a5),a0 ;NewMenu Struktur
- lea MenuTags(pc),a1 ;Menu TAGS
- jsr _LVOCreateMenusA(a6) ;Menu Struktur erschaffen
- move.l d0,MenuPtr(a5) ;Menu Addr.
- beq.s MenuError ;Fehler ?
- move.l d0,a0
- move.l VisualInfo(a5),a1 ;VisualInfo Addr.
- suba.l a2,a2 ;keine TAGS
- jsr _LVOLayoutMenusA(a6) ;Menu Aufbauen
- move.l d0,d1 ;alles geklappt
- bne.s MenuOK ;JA
- MenuError
- moveq #38,d7 ;38=Menu Fehler
- MenuOK
- rts
- RemoveMenu
- move.l GADBase(a5),a6 ;GadTools Base
- move.l MenuPtr(a5),a0 ;Menu Addr.
- jsr _LVOFreeMenus(a6) ;Gebe Speicher der Menu Struktur frei
- rts
- ;;
- ** SetAndLayout ClearMenu PrintIUnter
- SetAndLayout
- move.l INTUIBase(a5),a6 ;Intuition Base
- move.l WindowHandle(a5),a0 ;Fenster Addr.
- move.l MenuPtr(a5),a1 ;Menu Addr.
- jsr _LVOSetMenuStrip(a6) ;Setze Menu
- move.l d0,d1 ;Fehler ?
- bne.s SetLayOK ;NEIN
- moveq #38,d7 ;Menu Fehler
- SetLayOK
- rts
- ClearMenu
- move.l INTUIBase(a5),a6 ;Intuition Base
- move.l WindowHandle(a5),a0 ;Fenster Addr.
- jsr _LVOClearMenuStrip(a6) ;Entferne Menu
- rts
- PrintIUnter
- lea PrintPage(a5),a1 ;PrintIText Addr
- lea (a1,d5.w),a1 ;welches Menu
- move.l (a1),a1
- lea it_SIZEOF(a1),a1
- move.l WinRPort(a5),a0 ;Fenster RastPort Addr.
- moveq #0,d0
- moveq #0,d1
- move.b RelativeTopC(a5),d1 ;Relative
- move.b RelativeLeftC(a5),d0
- move.l INTUIBase(a5),a6 ;Intuition Base
- jsr _LVOPrintIText(a6) ;Schreibe Text
- rts
- ;;
- ** WertePrefsAus
- WertePrefsAus
- move.w SCHoehe(a5),d0 ;Screen Höhe
- sub.w #20,d0 ;Höhe-20
- moveq #10,d1
- divu.w d1,d0 ;Höhe/10
- move.w d0,MaxSpaltenZahl(a5) ;Max. Anzahl in einer Spalte
- move.l FileSpeicher(a5),a1 ;PrefsFile anfang
- move.l Filegroesse(a5),d0 ;PrefsFile größe
- move.l a1,a2 ;PrefsFile -->a2
- add.l d0,a2 ;PrefsFile Ende
- MenuDochNoch
- cmp.l #'MENU',(a1) ;MENU vorhanden
- beq.s MenuEintrag ;JA!
- keinMenuReturn
- cmp.b #10,(a1)+ ;Suche Return
- bne.s keinMenuReturn
- cmp.l a1,a2 ;PrefsFile schon Ende
- bgt.s MenuDochNoch ;NEIN dann nach MENU suchen
- lea MenuData(a5),a3 ;BangerMenu Struktur
- move.l FileSpeicher(a5),a1 ;PrefsFile
- bra.w UnterMenuGefunden
- MenuEintrag
- lea MenuData(a5),a3 ;BangerMenu Struktur
- moveq #0,d0
- EintragMenuSLoop
- cmp.b #10,(a1)+ ;Suche Return
- bne.s EintragMenuSLoop
- EintragMenu2Loop
- move.b #0,-1(a1) ;NULL Byte als Terminierung
- cmp.l #'ENDM',(a1) ;Vergleiche ENDM
- beq.s AlleMenuEintrage ;JA alle Menu einträge gefunden
- cmp.l a1,a2 ;Schon Ende
- bls.w PrefsWerteError ;JA dann Fehler in den Prefs
- lea 1(a1),a1 ;ein Leerzeichen bevor Menuname Anfängt
- move.l a1,(a3) ;MenuName in BangerMenu Struktur eintragen
- weiterSuchenMKey
- move.b (a1)+,d1
- cmp.l #'MKEY',(a1) ;vergleiche MKEY vorhanden
- beq.s TasteFuerMenu ;JA Menu hat eine Taste
- cmp.b #10,d1 ;Menuname Ende ?
- bne.s weiterSuchenMKey ;Nein
- MKeyGefunden
- lea BaM_SIZEOF(a3),a3 ;nächste Struktur für ein neues Menu
- addq #1,d0 ;Zähle Menus
- cmp.b #50,d0 ;schon 50 ?
- beq.s AlleMenuEintrage ;JA dann abschliessen
- bra.s EintragMenu2Loop ;Ansonsten nächstes Menu extrahieren
- TasteFuerMenu
- move.b #0,-1(a1) ;MeunName NULL Byte Termieren
- lea 5(a1),a1 ;Vorspringen zum Zeichen
- move.l a1,BaM_MenuKey(a3) ;Zeichen eintragen in BangerMenu
- EintragMenu3Loop
- cmp.b #10,(a1)+ ;Return ?
- bne.s EintragMenu3Loop ;NEIN
- bra.s MKeyGefunden ;JA und zurück
- AlleMenuEintrage
- move.b d0,MenuEintragAnzahl(a5) ;Anzahl der Menu Einträge im Screen-Menu
- lea MenuData(a5),a3 ;BangerMenu Struktur
- NaechstesUnterM
- move.l BaM_MenuTitleText(a3),a0 ;MenuTitel
- move.l FileSpeicher(a5),a1 ;PrefsFile Anfang
- move.b (a0),d0 ;Erstes Zeichen vom MenuTitel --> d0
- TestUnterMenuLoop
- cmp.b (a1),d0 ;Vergleiche PrefsFile mit d0
- beq.s MenuBezeich ;gleich
- keinMenuBezReturn
- cmp.b #10,(a1)+ ;Suche Return
- bne.s keinMenuBezReturn
- cmp.l a1,a2 ;PrefsEnde
- bgt.s TestUnterMenuLoop ;nächste Zeile im PrefsFile
- bra.w PrefsWerteError ;Menu Eintrag Leer
- MenuBezeich
- move.l a0,a4 ;MenuTitel
- MenuBezeichLoop
- move.b (a0)+,d1 ;Buchstabe --> d1
- tst.b d1 ;MenuTitle Ende ?
- beq.s UnterErstGefunden ;JA --> MenuDaten gefunden
- cmp.b (a1)+,d1 ;Vergleiche Prefs mit MenuTitel
- beq.s MenuBezeichLoop ;Noch gleich
- move.l a4,a0 ;Zurück setzen des MenuTitels
- bra.s keinMenuBezReturn ;und weiter suchen
- UnterErstGefunden
- move.b #0,(a1)+ ;Prefs MenuTitel Null Terimiert
- UnterMenuGefunden
- moveq #0,d5
- moveq #0,d4 ;d4=SpaltenAnzahl
- UnterMenu2Loop
- moveq #0,d0 ;Anzahl der Gadgets
- moveq #0,d2 ;Längste Gadget
- moveq #0,d3 ;0/1
- UnterMenuLoop
- moveq #0,d1 ;Aktuell Gadgetlänge
- cmp.l a1,a2 ;PrefsEnde ?
- beq.w Unter2MenuFertig ;JA Daten für Menu fertig
- cmp.l #'END ',(a1) ;END vorhanden
- beq.w UnterMenuFertig ;JA Daten für Menu fertig
- cmp.l #'COLT',(a1) ;COLT vorhanden
- beq.s SpaltenTitle ;Neu Spalte
- lea 1(a1),a1 ;Ein Vorrücken da ein Space vor den Daten liegt
- cmp.l a1,a2 ;PrefsEnde ?
- beq.w Unter2MenuFertig ;JA Daten für Menu fertig
- keinReturn
- addq #1,d1 ;länge GadgetName aus der Prefs
- cmp.b #10,(a1)+ ;Return suchen
- bne.s keinReturn
- move.b #0,-1(a1) ;das Return ersetzen mit NullByte
- tst.b d3 ;d3 0/1 entweder Gadgetname oder Programm bzw. Batchdatei
- beq.s BreiteZaehlen ;GadgetName
- moveq #0,d3 ;nächste Zeile ist wieder ein Gadgetname
- bra.s UnterMenuLoop ;nächste Zeile bearbeiten
- BreiteZaehlen
- moveq #1,d3 ;nächste Zeile ist Programm bzw. Batchdatei
- addq #1,d0 ;d0=Anzahl der Gadgets
- cmp.b d2,d1 ;d2 enthält den längsten Gadgetnamen
- bls.s UnterMenuLoop ;nächste Zeile bearbeiten
- move.b d1,d2 ;neue länge war größer als alte
- bra.s UnterMenuLoop ;nächste Zeile bearbeiten
- SpaltenTitle
- cmp.b #50,d4 ;SpaltenAnzahl=50 ?
- beq.w MenuIstVoll ;JA keine Spalte mehr
- lea 9(a1),a1 ;Vorsprung zum SpaltenTitle
- tst.b d4 ;erste Spalte ?
- beq.s keineBaMDaten ;JA
- bsr.s Spalteninit ;Spalten Daten eintragen
- tst.l d7 ;Gadget über dem Max. Check
- bne.s MenuGadgetzuviel ;JA zu viele
- bra.s BaMDatenDA
- keineBaMDaten
- lea BaM_SpaltenTitleText(a3),a0 ;SpaltenTitel eintrag in BangerMenu Struktur
- BaMDatenDA
- move.l a1,(a0) ;PrefsSpaltenTitel
- SpaltenTitleLoop
- cmp.b #10,(a1)+ ;Suche Return
- bne.s SpaltenTitleLoop
- move.b #0,-1(a1) ;Mit NULL Byte Terimieren
- addq #1,d4 ;SpaltenAnzahl erhöhen
- bra.s UnterMenu2Loop ;Nächste Zeile
- MenuGadgetzuviel
- sub.w d0,d5 ;Wieder alte Gadgets Anzahl herstellen
- moveq #0,d7 ;d7 korrigieren
- bra.w MenuIstVoll ;diese Menu zu voll
- Spalteninit
- moveq #-1,d7 ;Error wenn Gadget zu viel sind
- add.w d0,d5 ;GadgetAnzahl der vorigen Spalte addieren
- cmp.w #2560,d5 ;gesamt Gadgets Anzahl über 2560 ?
- bge.s keineSpaltemehrMoeg ;JA - dann keine weiteren Gadgets mehr
- move.w d4,d6 ;SpaltenAnzahl --> d6
- subq #1,d6 ;SpaltenAnzahl-1
- lea BaM_GadgetLaenge(a3),a6 ;Längste Gadget in der Spalte
- lea (a6,d6.w),a6
- lea BaM_SpaltenLaenge(a3),a4 ;Spalten Länge
- lea (a4,d6.w),a4
- add.w d6,d6 ;SpaltenAnzahl*4, weil long
- add.w d6,d6
- lea BaM_SpaltenTitleText(a3),a0 ;auf Aktuellen SpaltenTitle setzen
- lea (a0,d6.w),a0
- move.l (a0),d7 ;SpaltenTitel Addr. d7
- SpaltenCheck
- cmp.w MaxSpaltenZahl(a5),d0 ;Max. Anzahl an Gadget pro Spalte
- bls.s nurnocheineSpalte ;weniger noch ein Spalte
- sub.w MaxSpaltenZahl(a5),d0 ;Max. Anzahl an Gadget pro Spalte abziehen von Anzahl der Gadgets
- move.b MaxSpaltenZahl+1(a5),(a4)+ ;Spaltenlänge = max.
- move.b d2,(a6)+ ;Längsten GadgetNamen
- move.l d7,(a0)+ ;Spalte besitzt den gleichen SpaltenTitel
- tst.b SpalteOhneTitle(a5) ;Spalte Ohne Titel?
- bne.s NaechstenSPTitleKoor ;JA
- SPTitleKorrFertig
- addq #1,d4 ;Spalten Anzahl erhöhen
- cmp.b #50,d4 ;50 Spalten erreicht ?
- beq.s keineSpaltemehrMoeg ;JA genug Spalten
- bra.s SpaltenCheck ;Ansonsten weitere Erzeugen
- NaechstenSPTitleKoor
- move.l d7,a1 ;a1=Gadgetname aus Konfig
- move.w MaxSpaltenZahl(a5),d1 ;d1=Max. Anzahl an Gadgets/Spalte
- add.w d1,d1 ;*2 weil GadgetName + ProgrammName
- SPTitle1Korr
- tst.b (a1)+ ;NULL Byte suche
- bne.s SPTitle1Korr
- subq #1,d1 ;Schon alle Gadgets
- bne.s SPTitle1Korr ;Nein
- move.l a1,d7 ;d7=Addr. der Gadget der nächsten Spalte
- bra.s SPTitleKorrFertig
- nurnocheineSpalte
- move.b d0,(a4) ;Spaltenlänge
- move.b d2,(a6) ;Längsten GadgetNamen
- move.l d7,(a0)+ ;Spalte besitzt den gleichen SpaltenTitel
- moveq #0,d7 ;d7 wieder löschen
- keineSpaltemehrMoeg
- rts
- Unter2MenuFertig
- move.l FileSpeicher(a5),a1 ;PrefsFile anfang
- moveq #1,d4 ;Eine Spalte
- bra.s AltePrefsOhneSpalten
- UnterMenuFertig
- tst.b d4 ;Spalten ?
- bne.s JauEinSpalt ;JA
- addq #1,d4 ;Spalten Anzahl +1
- tst.b d0 ;keine Gadgets ?
- beq.s JauEinSpalt ;JA
- move.w d0,d1 ;Gadgets Anzahl --> d1
- add.w d1,d1 ;d1*2 (GadgetNamen + Programm/Batch)
- addq #1,d1 ;d1+1
- EndeVonMenu
- tst.b -(a1) ;Suche NULL Byte (Ende einer Zeile)
- bne.s EndeVonMenu
- subq #1,d1 ;Gefunden d1-1
- bne.s EndeVonMenu
- EinVorRueck
- lea 1(a1),a1 ;Nächste Zeile
- cmp.b #' ',(a1) ;Leerzeichen
- beq.s EinVorRueck ;JA
- AltePrefsOhneSpalten
- lea BaM_SpaltenTitleText(a3),a0 ;SpaltenTitel --> in diesem Fall nicht
- move.l a1,(a0) ;darum wird das SpalteOhneTitle Flag gesetzt
- move.b #-1,SpalteOhneTitle(a5) ;Spalte Ohne Titel
- JauEinSpalt
- bsr.w Spalteninit ;Spalten Daten init
- tst.b d7 ;Zu viele Gadgets
- bne.w MenuGadgetzuviel ;Gadgets Anzahl wieder herstellen
- tst.b SpalteOhneTitle(a5) ;Spalte Ohne Titel
- beq.s MenuIstVoll ;NEIN
- neg.b d4 ;SpaltenAnzahl wieder korrigieren
- move.b #0,SpalteOhneTitle(a5) ;Flag zurück setzen für nächstes Menu
- MenuIstVoll
- lea BaM_SpaltenAnzahl(a3),a4 ;Spalten Anzahl eintragen
- move.b d4,(a4)
- lea BaM_GadgetAnzahl(a3),a4 ;Gadgets Anzahl Insgesamt pro Menu eintragen
- move.w d5,(a4)
- lea BaM_SIZEOF(a3),a3 ;Nächstes Menu
- tst.l (a3) ;vorhanden ?
- bne.w NaechstesUnterM ;JA
- rts
- PrefsWerteError
- moveq #37,d7 ;37=Fehler im Einstellungsfile
- rts
- ;;
- ** Parameter
- Parameter
- move.l DOSBase(a5),a6 ;DOS Befehle
- lea ParaTemplate(pc),a1 ;Parameter String
- move.l a1,d1
- lea PrefsLoadKey(a5),a1 ;Speicher für die 4 Parameter
- move.l a1,d2
- moveq #0,d3 ;rdargs keine
- jsr _LVOReadArgs(a6) ;Parameter einlesen und parsen
- move.l d0,RDArgs(a5) ;Resultat nach RDArgs
- bne.s ParaOK ;Parameter OK!
- jsr _LVOIoErr(a6) ;Error Routine
- move.l d0,d1 ;Error Nr.
- moveq #0,d2 ;keine Überschrift
- jsr _LVOPrintFault(a6) ;FehlerAusgabe im Con-Fenster
- moveq #32,d7 ;32=falsche Parameter angabe
- ParaOK
- rts
- FreePara
- move.l RDArgs(a5),d1 ;ReadArgs Resultat
- move.l DOSBase(a5),a6 ;wieder Freigeben
- jsr _LVOFreeArgs(a6)
- rts
- ;;
- ** Warte auf Caps Lock
- WaitOnCaps
- tst.l NOKEYArray(a5) ;kein CAPS-Lock
- bne.s NOKeyJA ;ja weiter
- move.l 4.w,a6 ;EXECBase
- jsr _LVOCreateMsgPort(a6) ;Neuen Message Port init
- move.l d0,MsgPortAddr(a5) ;Addr. des Message Port
- bne.s MsgPortOK ;Message Port vorhanden
- moveq #29,d7 ;29=kein MsgPort
- rts
- MsgPortOK
- move.l d0,a0
- move.l #IOSTD_SIZE,d0 ;normale IORequest-Struktur
- jsr _LVOCreateIORequest(a6) ;Init IORequest
- move.l d0,TastenIBlock(a5) ;Addr. IORequest
- bne.s OeffneDev ;kein Fehler
- moveq #30,d7 ;30=konnte kein IORequest init
- bra.s FreiMsgP
- OeffneDev
- lea inputname(pc),a0 ;input.device
- move.l d0,a1 ;IORequest Addr.
- moveq #0,d0 ;Unit 0
- move.l #IOF_QUICK,d1 ;Flags
- jsr _LVOOpenDevice(a6) ;Öffnen des Input.device
- tst.l d0 ;Fehler ?
- beq.s DevOK ;Nein
- moveq #31,d7 ;31=konnte Device nicht öffnen
- bra.s IOReqDel
- DevOK
- move.l TastenIBlock(a5),a0 ;IORequest Struktur
- move.l IO_DEVICE(a0),a6 ;Device Node name
- jsr _LVOPeekQualifier(a6) ;Tastaturstatus
- move.w d0,d1 ;d1=InputEvent-Struktur
- and.w #IEQUALIFIER_LEFTBUTTON,d1 ;Bit Maske für Linken Mouse Knopf
- cmp.w #IEQUALIFIER_LEFTBUTTON,d1 ;gleich Linke Mouse Knopf
- beq.s CAPSgedrueckt
- and.w #IEQUALIFIER_CAPSLOCK,d0 ;Bit Maske für CAPSLock
- cmp.w #IEQUALIFIER_CAPSLOCK,d0 ;CAPSLock gedrückt
- beq.s CAPSgedrueckt ;JA
- moveq #10,d7 ;Beenden
- CAPSgedrueckt
- move.l 4.w,a6 ;EXECBase
- lea TastenIBlock(a5),a1 ;IORequest
- jsr _LVOCloseDevice(a6) ;SchliesseDevice
- IOReqDel
- move.l TastenIBlock(a5),a0 ;IORequest
- jsr _LVODeleteIORequest(a6) ;Gib Speicher Frei
- FreiMsgP
- move.l MsgPortAddr(a5),a0 ;Message Struktur
- jsr _LVODeleteMsgPort(a6) ;Gib Message Struktur frei
- NOKeyJA
- rts
- ;;
- ** GadAktivieren
- GadAktivieren
- move.l GadgetAddr(a5),a3 ;GadgetList Addr
- lea GadgetPage(a5),a4 ;Gadget Anfang einer Seite
- lea (a4,d5.w),a4 ;welches Menu
- move.l (a4),a4
- move.l (a4),a4
- moveq #1,d6 ;Aktiviere
- bsr.w SelGK ;Setze Gadget
- lea GadgetPage(a5),a4 ;Gadget Anfang einer Seite
- lea (a4,d5.w),a4
- move.l (a4),a4
- move.l a4,AnGad(a5) ;Angewählte Gadget Addr.
- rts
- ;;
- ** InitRelative
- InitRelative
- lea topazFName8(pc),a0 ;FontName Addr.
- lea topaz8(pc),a1 ;TextAttr-Struktur
- move.l a0,(a1) ;Init Addr. in der Struktur
- move.l a1,FontAddr(a5) ;Varibale für TextAttr-Struktur
- rts
- ;;
- ** MessageAbFragen MsgVerarbeitung Sprung
- MessageAbFragen
- move.l WindowHandle(a5),a0 ;a0=FensterAddr.
- move.l wd_UserPort(a0),a0 ;a0=Fenster UserPort
- move.l 4.w,a6 ;a6=EXECBase
- jsr _LVOWaitPort(a6) ;Auf Nachricht warten für das Fenster
- nocheine
- move.l GADBase(a5),a6 ;a6=GadTools Base
- move.l WindowHandle(a5),a0 ;a0=FensterAddr.
- move.l wd_UserPort(a0),a0 ;a0=Fenster UserPort
- jsr _LVOGT_GetIMsg(a6) ;Hole Nachricht
- move.l d0,a1 ;a1=Nachricht
- tst.l d0 ;keine Nachricht mehr da?
- beq.s MessageAbFragen ;JA
- move.w im_Qualifier(a1),d2 ;d2=Qualifier Tasten
- move.l im_Class(a1),d3 ;d3=Nachrichten Klasse
- move.w im_Code(a1),d4 ;d4=Nachrichten Code
- move.l im_IAddress(a1),a4 ;a4=Addresse
- jsr _LVOGT_ReplyIMsg(a6) ;Antwort
- cmpi.l #IDCMP_CLOSEWINDOW,d3 ;Fenster schliessen
- beq.w ende ;dann ende
- cmpi.l #IDCMP_REFRESHWINDOW,d3 ;Fenster neu zeichen
- beq.w RefreWin
- cmpi.l #IDCMP_GADGETUP,d3 ;Gadget losgelassen
- beq.w GadAuswertung
- cmpi.l #IDCMP_VANILLAKEY,d3 ;normaler Tasten druck
- beq.w VanTaste
- cmpi.l #IDCMP_RAWKEY,d3 ;Spezial Tasten
- beq.w RAWTaste
- cmp.l #IDCMP_MENUPICK,d3 ;Menu
- beq.s MenuAuswertung
- bra.s nocheine
- ** MenuAuswertung
- MenuAuswertung
- cmpi.w #MENUNULL,d4 ;kein Menu aus gewählt
- beq.b nocheine
- cmp.w #$F800,d4 ;Über
- beq.w About
- cmp.w #$F820,d4 ;Beeenden
- beq.w ende
- moveq #0,d6
- sub.w #$F801,d4 ;d4=vielfaches von 20
- MenuErmittelLoop
- tst.w d4 ;d4=0?
- beq.s MenuWeiterWert ;JA
- sub.w #$20,d4 ;d4-20
- addq #1,d6 ;d6=Menuzähler
- bra.s MenuErmittelLoop
- MenuWeiterWert
- cmp.b MenuAnGe(a5),d6 ;Angewähltes Menu=d6
- beq.w nocheine ;JA
- bsr.w ReGadList ;Entferne Gadget Liste
- bsr.w RemoveGadget ;gebe Gadget speicher frei
- move.b d6,MenuAnGe(a5) ;neues Angewähltes Menu
- move.w HoeheWin(a5),AlteHoeheWin(a5) ;Alte Fenster Höhe
- move.w BreiteWin(a5),AlteBreiteWin(a5) ;Alte Fenster Breite
- bsr.w InitGadget ;Gadget erschaffen
- tst.b d7 ;Fehler
- beq.s NeuMenuGadgetOK ;Nein
- rts
- NeuMenuGadgetOK
- moveq #0,d5
- move.w d5,AnPage(a5) ;erste Seite ist angewählt
- move.w AlteHoeheWin(a5),d0 ;d0=alte Fenter Höhe
- cmp.w HoeheWin(a5),d0 ;vergleiche mit jetziger Fenster Höhe
- bls.s VergroesserWin ;Verändere Fenster
- move.w AlteBreiteWin(a5),d0 ;d0=alte Fenter Breite
- cmp.w BreiteWin(a5),d0 ;vergleiche mit jetziger Fenster Breite
- bgt.s keinVergroessern ;Fenster nicht verändern
- VergroesserWin
- move.l WindowHandle(a5),a0 ;a0=Fenster Addr.
- move.w BreiteWin(a5),d0 ;d0=FensterBreite
- sub.w AlteBreiteWin(a5),d0 ;d0-alte FensterBreite
- lsr.w #1,d0 ;d0/2
- neg.w d0 ;-d0
- move.w HoeheWin(a5),d1 ;d1=FensterHöhe
- sub.w AlteHoeheWin(a5),d1 ;d1-alte FensterHöhe
- lsr.w #1,d1 ;d1/2
- neg.w d1 ;-d1
- move.l INTUIBase(a5),a6 ;a6=Intuition Base
- jsr _LVOMoveWindow(a6) ;Verschiebe Fenster
- move.l WindowHandle(a5),a0 ;a0=Fenster Addr.
- move.w BreiteWin(a5),d0 ;d0=FensterBreite
- sub.w AlteBreiteWin(a5),d0 ;d0-alte FensterBreite
- move.w HoeheWin(a5),d1 ;d1=FensterHöhe
- sub.w AlteHoeheWin(a5),d1 ;d1-alte FensterHöhe
- jsr _LVOSizeWindow(a6) ;Vergrößere Fenster
- keinVergroessern
- bsr.w AddGadList ;GadgetListe anfügen
- bsr.w PrintIUnter ;Text Ausgeben
- bsr.w GadAktivieren ;erstes Gadget aktivieren
- bra.w nocheine
- ;;
- ** About
- About
- move.l WindowHandle(a5),a0 ;a0=Fenster Addr.
- lea AbReqTi(pc),a2 ;a2=RequesterTitel
- lea AbReqTxt(pc),a3 ;a3=RequesterText
- lea AbGadTxt(pc),a4 ;a4=RequesterGadgetText
- lea EndeReq(pc),a1 ;a1=EasyRequesterStruktur
- move.l a2,8(a1)
- move.l a3,12(a1)
- move.l a4,16(a1)
- suba.l a2,a2
- suba.l a3,a3
- move.l INTUIBase(a5),a6 ;a6=Intuition Base
- jsr _LVOEasyRequestArgs(a6) ;Requester aufrufen
- bra.w nocheine
- ;;
- ** RefreWin
- RefreWin
- bsr.w RefreshWin ;Fenster Neuzeichen
- bra.w nocheine
- ;;
- ** RAWTaste
- RAWTaste
- move.b d2,d1
- and.b #IEQUALIFIER_CONTROL,d1
- bne.s CtrlTaste
- and.b #IEQUALIFIER_LSHIFT!IEQUALIFIER_RSHIFT,d2
- bne.s ShiftTaste
- cmp.b #$4e,d4 ;rechts
- beq.w rechteBank
- cmp.b #$4f,d4 ;links
- beq.w linkeBank
- cmp.b #$4d,d4 ;Down
- beq.w DownTaste
- cmp.b #$4c,d4 ;Up
- beq.w UpTaste
- bra.w nocheine
- VanTaste
- cmp.b #$0d,d4 ;Return
- beq.s Auswahl
- cmp.b #$1b,d4 ;Esc
- beq.w ende
- cmp.b #'<',d4 ;vorige Seite
- beq.s PfeilLinks
- cmp.b #'>',d4 ;nächste Seite
- beq.s PfeilRechts
- bclr #5,d4 ;bit 5 löschen Groß und Kleinschreibung gleich
- cmp.b #'Q',d4 ;q/Q
- beq.w ende
- bra.w nocheine
- ShiftTaste
- cmp.b #$4e,d4 ;rechts+shift
- beq.w rechtsShift
- cmp.b #$4f,d4 ;links+shift
- beq.w linkeShift
- cmp.b #$4d,d4 ;Down+shift
- beq.w DownShift
- cmp.b #$4c,d4 ;Up+shift
- beq.w UpShift
- bra.w nocheine
- CtrlTaste
- cmp.b #$4e,d4 ;rechts+shift
- beq.w rechtsCtrl
- cmp.b #$4f,d4 ;links+shift
- beq.w linkeCtrl
- bra.w nocheine
- Auswahl
- move.l AnGad(a5),a4 ;a4=Angewählte GadgetAddr.
- move.l (a4),a4
- bra.s GadExe
- PfeilLinks
- tst.w AnPage(a5) ;erste Seite
- beq.w nocheine ;JA
- bra.w PageLGAn
- PfeilRechts
- bsr.s MenuDataInit ;Daten zur jetzigen Seite heraussuchen
- moveq #0,d0
- move.b BaM_SeitenAnzahl(a4),d0 ;d0=Seiten Anzahl
- cmp.w AnPage(a5),d0 ;vergleiche mit angewählter Seite
- beq.w nocheine ;letzte Seite
- bra.w PageRGAn
- MenuDataInit
- lea MenuData(a5),a4 ;BangerMenu Struktur
- moveq #0,d0
- moveq #0,d1
- move.b MenuAnGe(a5),d0 ;Angewähltes Menu
- move.w #BaM_SIZEOF,d1 ;BangerMenu Struktur Größe
- mulu.w d0,d1
- lea (a4,d1.w),a4 ;BangerMenuData
- rts
- ;;
- ;;
- ** GadAuswertung
- GadAuswertung
- lea PageLAddr(a5),a0 ;a0=GadgetAddr. vorige Seiten Gadget
- move.w AnPage(a5),d5 ;d5=Angewählte Seite
- lea (a0,d5.w),a0
- move.l (a0),a0
- cmp.l a0,a4 ;vergleiche mit Addresse
- beq.w PageLGAn ;vorige Seite gewählt
- lea PageRAddr(a5),a0 ;a0=GadgetAddr. nächste Seiten Gadget
- lea (a0,d5.w),a0
- move.l (a0),a0
- cmp.l a0,a4 ;vergleiche mit Addresse
- beq.w PageRGAn ;nächste Seite gewählt
- GadExe
- move.l gg_UserData(a4),a1 ;a1=Addr. des GadgetNamen aus der Konfig
- SucheAnfangExe
- tst.b (a1)+ ;Suche Null Bye
- bne.s SucheAnfangExe
- cmp.b #' ',(a1) ;Leerzeichen
- bne.s keinLeerCom ;keins
- lea 1(a1),a1 ;sonst ein weiter
- keinLeerCom
- move.l DOSBase(a5),a6 ;a6=DOS Base
- move.l a1,a4 ;a4=Addr. des Auszuführenden Strings
- ComCDTest
- move.b (a1)+,d0 ;d0=ein Buchstabe
- tst.b d0 ;Null Byte?
- beq.s ComEnde ;JA
- cmp.b #'[',d0 ;suche Klammer
- bne.s ComCDTest ;keine
- cmp.w #'C]',(a1) ;dannach C]
- bne.s ComCDTest ;Nein
- move.b #0,-2(a1) ;vor der Klammer mit NULL abschließen
- move.l a4,d1 ;d1=Ausführbarer String
- jsr _LVOFilePart(a6) ;Filename suchen
- move.l a4,d1 ;d1=Pfad
- move.l d0,a4 ;a4=Filename
- move.b #0,-1(a4) ;Null Byte zwischen Pfad und Filenamen
- move.l #ACCESS_READ,d2 ;d2=Lesend
- jsr _LVOLock(a6) ;Besetzen
- move.l d0,ProgrammDir(a5) ;Lock Addr. des Programm Dir
- move.l d0,d1 ;d1=Lock Addr. des Programm Dir
- jsr _LVOCurrentDir(a6) ;wechseln des Verzeichnisses
- move.l d0,AltesDir(a5) ;Addr. des alten Verzeichnisses
- ComEnde
- lea AysnchOut(pc),a0 ;a0=AusgabeFenster Daten
- move.l a0,d1 ;d1=Fenster
- move.l #MODE_OLDFILE,d2 ;d2=AcessMode
- jsr _LVOOpen(a6) ;Fenster Öffnen
- lea SystemExeTags(pc),a0 ;a0=SystemTags
- move.l d0,4(a0) ;FileHandle eintragen als SYS_input
- move.l a0,d2 ;d2=Tags
- move.l a4,d1 ;d1=Commando
- jsr _LVOSystemTagList(a6) ;Commando ausführen
- move.l AltesDir(a5),d1 ;d1=altes Verzeichnis
- tst.l d1 ;Überhaupt vorhanden
- beq.s KeinVerzWechsle ;NEIN
- jsr _LVOCurrentDir(a6) ;wechsel zum alten Verzeichnis
- move.l ProgrammDir(a5),d1 ;d1=Programm Dir
- jsr _LVOUnLock(a6) ;wieder freigeben
- KeinVerzWechsle
- moveq #10,d7 ;10=Startup warn Meldung
- rts
- ;;
- ** TastenAuswertung
- UpTaste
- move.l AnGad(a5),a4 ;a4=Angewähltes Gadget
- move.w AnPage(a5),d5 ;d5=Angewählte Seite
- lea GadgetPage(a5),a3 ;a3=GadgetListe Addr. abhängig von der Seite
- lea (a3,d5.w),a3
- move.l (a3),a3
- cmp.l a3,a4 ;vergleiche
- beq.w DownShift ;erstes Gadget der Seite
- lea -4(a4),a3 ;a3=voriges Gadget
- bra.s GadAnwaehlen ;und anwählen
- DownTaste
- move.l AnGad(a5),a4 ;a4=Angewähltes Gadget
- move.w AnPage(a5),d5 ;d5=Angewählte Seite
- lea 4(a4),a3 ;a3=nächstes Gadget
- cmp.l #0,(a3) ;keins mehr?
- beq.w UpShift ;JA
- GadAnwaehlen
- move.l (a4),a4 ;Addr. Angewähltes Gadget
- moveq #0,d6 ;d6=nicht aktive
- bsr.w SelGK ;Gadget bearbeiten
- moveq #1,d6 ;d6=aktive
- move.l (a3),a4 ;a4=jetzige Gadget
- bsr.w SelGK ;Gadget bearbeiten
- move.l a3,AnGad(a5) ;neues angewähltes Gadget Addr.
- bra.w nocheine
- rechteBank
- bsr.w NummerGad ;Daten anlegen
- tst.w NaechsteSPLaenge(a5) ;Nächste Spalten Länge=0?
- beq.s letztesGDAnw ;Letztes Gadget anwählen
- move.w NaechsteSPLaenge(a5),d0 ;d0=Nächste Spalten Länge
- move.w RelativeGDPos(a5),d1 ;d1=Relative Gadget Position vom Anfang der Spalte
- tst.b NaechsteSPSeiten(a5) ;Nächste Spalte neue Seite?
- bne.s NeueSeitebeiRechts ;JA
- cmp.w d0,d1 ;vergleiche
- bgt.s RechteSpalteKleiner ;nächste Spalte kürzer
- move.w JetztigeSPLaenge(a5),d0 ;d0=Jetzige Spalten länge
- add.w d4,d0 ;d4=Anzahl der Gadgets bis ausgewähltem
- bra.s DieSelbigeSeite ;d0=Anzahl der Gadgets bis Nächste Spalte
- RechteSpalteKleiner
- add.w d0,d4 ;d4=Nächste Spalte irgendwo in der Mitter
- move.w JetztigeSPLaenge(a5),d0 ;d0=Jetzige Spalten länge
- sub.w d1,d0 ;d0=Rest der jetzigen Spalte
- add.w d4,d0 ;d0=Am Ende der Nächsten Spalte
- bra.s DieSelbigeSeite
- NeueSeitebeiRechts
- moveq #4,d5 ;d5=Nächste Seite
- cmp.w d0,d1 ;Nächste Spalte größer ?
- bgt.s SpaltePasst ;JA
- move.w d1,d0 ;d0=Nächste Spalten Länge
- SpaltePasst
- bra.b NeueSeite ;Neu Seite init
- letztesGDAnw
- move.w JetztigeSeite(a5),d0 ;d0=Jetzige Seiten länge
- DieSelbigeSeite
- subq #1,d0 ;d0=Gadget Anzahl vom Anfang bis zum angewähltem
- DieSelbige2Seite
- add.w d0,d0 ;*4
- add.w d0,d0
- move.w AnPage(a5),d5 ;d5=Angewählte Seite
- move.l AnGad(a5),a4 ;a4=Angewähltes Gadget
- lea GadgetPage(a5),a3 ;a3=GadgetList für die angebene Seite
- lea (a3,d5.w),a3
- move.l (a3),a3
- lea (a3,d0.w),a3 ;a3=Addr. des anzuwählenden Gadgets
- bra.b GadAnwaehlen
- linkeBank
- bsr.w NummerGad ;Längen init
- tst.w VorigeSPLaenge(a5) ;Vorige Spalten Länge=0?
- beq.s erstesGDAnw ;JA erstes Gadget anwählen
- tst.b VorigeSPSeiten(a5) ;Vorige Spalte neue Seite?
- bne.s NeueSeitebeiLinks ;JA
- move.w VorigeSPLaenge(a5),d0 ;d0=Vorige Spalten Länge
- move.w RelativeGDPos(a5),d1 ;d1=Relative Gadget Position vom Anfang der Spalte
- cmp.w d0,d1 ;Jetzige Spalte länger
- bhi.s LinkeSpalteKleiner ;Vorige Spalte kleiner
- sub.w d0,d4 ;d4=aktuelle Position-vorige Spalten länge
- move.w d4,d0 ;d0=neues Gadget
- bra.b DieSelbigeSeite
- LinkeSpalteKleiner
- move.w d4,d0 ;d0=aktuelle Position
- sub.w d1,d0 ;d0=aktuelle Position-relative Position
- bra.b DieSelbigeSeite
- erstesGDAnw
- moveq #1,d0 ;erstes Gadget
- bra.b DieSelbigeSeite
- NeueSeitebeiLinks
- moveq #-4,d5 ;vorige Seite
- move.w VorigeSeitenLaenge(a5),d0 ;d0=Vorige Seiten Länge
- move.w VorigeSPLaenge(a5),d1 ;d1=Vorige Spalten Länge
- move.w RelativeGDPos(a5),d2 ;d2=relative Position
- cmp.w d1,d2 ;vorige Spalte kleiner als jetzige Position
- bgt.s NeueSeite ;JA
- sub.w d1,d0
- add.w d2,d0 ;d0=neue Gadget Position
- ** NeueSeite
- * d0 = Neues Angewähltes GadgetNr. relative zum Anfang
- * d5 = Neue SeitenNummer
- NeueSeite
- subq #1,d0 ;d0=GadgetAnzahl-1
- NeueSeite2
- add.w AnPage(a5),d5 ;d5=Angewählte Seite
- NeueSeite3
- move.l AnGad(a5),a4 ;a4=Angewähltes Gadget
- cmp.b #36,d5 ;10. Seite
- bgt.w nocheine ;JA
- move.w d0,d7 ;d7=neue Gadget Position
- move.l (a4),a4 ;a4=Gadget Addr.
- moveq #0,d6 ;d6=nichtangewählt
- bsr.w SelGK ;Gadget Status setzen
- bsr.w ReGadList ;GadgetListe entfernen
- move.w d5,AnPage(a5) ;neue Seite
- bsr.w AddGadList ;GadgetListe hinzufügen
- add.w d7,d7 ;d7*4
- add.w d7,d7
- lea GadgetPage(a5),a3 ;a3=GadgetListe Addr.
- lea (a3,d5.w),a3
- move.l (a3),a3 ;a3=Gadgets
- lea (a3,d7.w),a3 ;a3=neues anzuwählendes Gadget
- moveq #0,d7 ;d7=0 (damit keine Fehler vorliegt)
- moveq #1,d6 ;d6=Gadget anwählen
- move.l (a3),a4 ;a4=GadgetAddr.
- bsr.w SelGK ;Gadgetanwählen
- move.l a3,AnGad(a5) ;Angewähltes Gadget
- bsr.w PrintIUnter ;TextAusgabe
- bra.w nocheine
- ;;
- ** NummerGad
- NummerGad
- move.l AnGad(a5),a4 ;a4=Angewähltes Gadget
- move.l (a4),a3 ;a3=Gadget Addr.
- move.w gg_GadgetID(a3),d6 ;d6=GadgetID Nr.
- bsr.w MenuDataInit ;BangerMenuStruktur->a4
- lea BaM_SpaltenLaenge(a4),a3 ;a3=SpaltenLängeAddr.
- lea BaM_GadgetLaenge(a4),a2 ;a2=GadgetLängeAddr.
- moveq #0,d5
- move.b BaM_SpaltenAnzahl(a4),d5 ;d5=SpaltenAnzahl
- tst.b d5 ;Spalten Ohne Title ?
- bpl.s keineUnsinnigeSpalte ;Nein
- neg.b d5
- keineUnsinnigeSpalte
- subq #1,d5 ;d5=SpaltenAnzahl-1
- move.w #0,VorigeSPLaenge(a5) ;VorigeSpaltenLänge
- moveq #0,d0
- moveq #20,d2 ;d2=Breite der Gadgets insgesamt
- move.w d6,d4 ;d4=GadgetID Nr.
- move.b (a3),d0 ;d0=SpaltenLänge
- move.w d0,ErsteSPLaenge(a5) ;ErsteSpaltenLänge
- SpaltenHochZLoop
- bsr.w SCBreiteBestimmen ;GadgetLänge in Breite umwandeln
- cmp.w SCBreite(a5),d2 ;mit ScreenBreite vergleichen
- bhi.w SeiteNeuBeiSpalte ;d2 höher neue Seite
- move.b #0,VorigeSPSeiten(a5) ;keine Neue Seite bei voriger Spalte
- VorigeSeiteKoori
- sub.w d0,d6 ;d6=GadgetNr.-SpaltenLänge
- cmp.w #1,d6 ;vergleich mit 1
- blt.s GadgetSpalteGef ;Spalte gefunden wo Gadget sich befindet
- move.w d0,VorigeSPLaenge(a5) ;vorigeSpaltenLänge Koorigieren
- add.w #20,d2 ;d2=Breite der Gadget insgesamt
- dbra d5,SpaltenHochZLoop ;solange bis keine Spalten mehr vorhanden sind
- GadgetSpalteGef
- add.w #20,d2 ;d2=Breite der Gadgets insgesamt
- move.w d0,JetztigeSPLaenge(a5) ;JetzigeSpaltenLänge
- add.w d6,d0
- move.w d0,RelativeGDPos(a5)
- tst.b d5 ;Noch Spalten vorhanden
- beq.s keineSpaltenLaengen ;Nein
- subq #1,d5 ;Spaltenanzahl koorigieren
- moveq #0,d0
- bsr.s SCBreiteBestimmen ;GadgetLänge in Breite umwandeln
- move.w d0,NaechsteSPLaenge(a5) ;NächsteSpaltenLänge
- cmp.w SCBreite(a5),d2 ;Neue Seite?
- bhi.s SeiteNeuBeiNaechster ;JA
- move.b #0,NaechsteSPSeiten(a5) ;keine Neue Seite bei nächster Seite
- subq #1,d5 ;Spaltenanzahl koorigieren
- bmi.s Korri1KeineSpalten
- NaechsteSeiteKoori
- add.w #20,d2 ;d2=GadgetBreite
- sub.w d0,d6 ;d6=negtive GadgetAnzahl
- bsr.s SCBreiteBestimmen ;GadgetLänge in Breite umwandeln
- cmp.w SCBreite(a5),d2 ;Breiter als Screen ?
- bhi.s SeiteNeuBei2Naechster ;JA
- dbra d5,NaechsteSeiteKoori ;solange bis keine Spalten mehr da sind
- Korri1KeineSpalten
- sub.w d0,d6 ;d6=negtive GadgetAnzahl
- KorriKeineSpalten
- move.b -(a3),d0 ;d0=Letzte Spalten Länge
- move.w d0,LetzteSPLaenge(a5) ;Letzte Spalten Länge
- SeiteRueckKorr
- neg.w d6 ;d6=GadgetAnzahl seit angewähltes Gadget
- add.w d4,d6 ;d6=GadgetAnzahl der Seite
- move.w d6,JetztigeSeite(a5) ;GadgetAnzahl der jetzigen Seite
- rts
- keineSpaltenLaengen
- move.b #0,NaechsteSPSeiten(a5) ;Nächste Spalte neue Seite: Nein
- move.w #0,NaechsteSPLaenge(a5) ;NächsteSpaltenLänge=0
- bra.s KorriKeineSpalten
- SCBreiteBestimmen
- move.b (a3)+,d0 ;d0=SpaltenLänge
- moveq #0,d1
- move.b (a2)+,d1 ;d1=GadgetLänge
- GadgetLaengeBerechne
- asl.w #3,d1 ;d1*8 (Pixelgröße)
- add.w #10,d1 ;d1+10
- add.w d1,d2 ;d2=Breite bislang
- rts
- SeiteNeuBeiSpalte
- moveq #20,d2
- moveq #0,d1
- move.b -1(a2),d1 ;d1=GadgetLänge
- bsr.s GadgetLaengeBerechne
- sub.w d6,d4 ;d4=VorigeGadgetAnzahl
- move.w d4,VorigeSeitenLaenge(a5) ;VorigeGadgetAnzahl
- move.w d6,d4 ;d4=noch vorhandene Gadgets bis angewähltes
- move.b #1,VorigeSPSeiten(a5)
- move.w d0,ErsteSPLaenge(a5) ;ErsteSpaltenLänge koorigieren
- bra.w VorigeSeiteKoori
- SeiteNeuBeiNaechster
- move.b #1,NaechsteSPSeiten(a5) ;Nächste Spalte neue Seite
- SeiteNeuBei2Naechster
- move.b -2(a3),d0 ;d0=Letzte Spalten Länge
- move.w d0,LetzteSPLaenge(a5) ;Letzte Spalten Länge
- bra.s SeiteRueckKorr
- ;;
- ** Auswertung PageLeft/PageRight Ctrl Shift
- PageLGAn
- moveq #-4,d5 ;d5=vorige Seite
- NeueSeiteLeft
- moveq #0,d0 ;erstes Gadget
- bra.w NeueSeite2
- PageRGAn
- moveq #4,d5 ;d5=nächste Seite
- bra.s NeueSeiteLeft
- rechtsCtrl
- bsr.w MenuDataInit ;BangerMenu Struktur init
- moveq #0,d1
- move.b BaM_SeitenAnzahl(a4),d1 ;Seiten Anzahl
- tst.b d1 ;nur eine Seite?
- beq.w letztesGDAnw ;JA
- cmp.w AnPage(a5),d1 ;Angewählte Seite=letzte Seite?
- bne.s PageRGAn ;Nein
- moveq #0,d5 ;erste Seite
- moveq #0,d0 ;erstes Gadget
- bra.w NeueSeite3
- linkeCtrl
- bsr.w MenuDataInit ;BangerMenu Struktur init
- tst.w AnPage(a5) ;Angewählte Seite=0
- bne.s PageLGAn ;Nein
- moveq #0,d0 ;erstes Gadget
- moveq #0,d5
- move.b BaM_SeitenAnzahl(a4),d5 ;d5=letzte Seite
- tst.b d5 ;nur eine Seite?
- beq.w DieSelbige2Seite ;JA
- bra.w NeueSeite3
- UpShift
- bsr.w NummerGad ;Längen init
- move.w RelativeGDPos(a5),d1 ;d1=Relative Gadget Position
- sub.w d1,d4 ;d4=Spalten Anfang
- move.w d4,d0 ;d0=Spalten Anfang
- bra.w DieSelbige2Seite
- DownShift
- bsr.w NummerGad ;Längen init
- move.w JetztigeSPLaenge(a5),d0 ;d0=Jetzige Spalten Länge
- move.w RelativeGDPos(a5),d1 ;d1=Relative Gadget Position
- sub.w d1,d0 ;d0=Rest der Spalte
- add.w d4,d0 ;d0=ende der Spalte
- bra.w DieSelbigeSeite
- linkeShift
- bsr.w NummerGad ;Längen init
- move.w RelativeGDPos(a5),d0 ;d0=Relative Position
- move.w ErsteSPLaenge(a5),d1 ;d1=Erste Spalten Länge
- cmp.w d0,d1 ;erste Spalte Länger?
- bgt.s ShiftLinksPasst ;JA
- move.w d1,d0 ;ende der ersten Spalte
- ShiftLinksPasst
- bra.w DieSelbigeSeite
- rechtsShift
- bsr.w NummerGad ;Längen init
- move.w JetztigeSeite(a5),d0 ;d0=Jetzige Seiten länge
- move.w LetzteSPLaenge(a5),d1 ;d1=Letzte Spalten Länge
- sub.w RelativeGDPos(a5),d1 ;d1=Relative Position abgezogen
- bmi.s ShiftRechtsPasst ;negative dann zu kurz
- sub.w d1,d0 ;d0=letzte Spalte
- ShiftRechtsPasst
- bra.w DieSelbigeSeite
- ;;
- **SelGK Selektiert Gadget also ein oder aus
- SelGK
- bsr.b RemoveGSuche ;Entferne Gadget
- tst.l d6 ;d6=0/1
- beq.s DisSel ;nicht aktivieren
- or.w #GFLG_SELECTED,gg_Flags(a4) ;angewählt Flag setzen
- bra.s NunSel
- DisSel
- eor.w #GFLG_SELECTED,gg_Flags(a4) ;nicht angewählt Flag setzen
- NunSel
- bsr.b AddGSuche ;Gadget wieder einfügen
- rts
- RemoveGSuche
- move.l WindowHandle(a5),a0 ;a0=Fenster Addr.
- move.l a4,a1 ;a1=Gadget Addr.
- move.l INTUIBase(a5),a6 ;a6=Intuition Base
- jsr _LVORemoveGadget(a6) ;Entferne Gadget
- rts
- AddGSuche
- move.l WindowHandle(a5),a0 ;a0=Fenster Addr.
- move.l a4,a1 ;a1=Gadget Addr.
- moveq #-1,d0 ;d0=als letztes
- jsr _LVOAddGadget(a6) ;Gadget Einfügen
- move.l a4,a0 ;a0=Gadget Addr.
- move.l WindowHandle(a5),a1 ;a1=Fenster Addr.
- suba.l a2,a2 ;a2=keine TAGS
- jsr _LVORefreshGadgets(a6) ;Zeichne Gadget neu
- rts
- ReGadList
- move.l WindowHandle(a5),a0 ;a0=Fenster Addr.
- lea GadgetListe(a5),a1 ;a1=Gadget Liste für alle 10 Seiten
- move.w AnPage(a5),d4 ;d4=angewählte Seite
- lea (a1,d4.w),a1
- move.l (a1),a1
- moveq #-1,d0 ;d0=alle
- move.l INTUIBase(a5),a6 ;a6=Intuitions Base
- jsr _LVORemoveGList(a6) ;Entferne GadgetListe
- move.l WinRPort(a5),a1 ;a1=Fenster RastPort
- moveq #0,d0 ;d0=Hintergrund Farbe
- move.l GFXBase(a5),a6 ;a6=GFX Base
- jsr _LVOSetAPen(a6) ;Zeichenstift auf Hintergrundfarbe setzen
- move.l WinRPort(a5),a1 ;a1=Fenster RastPort
- moveq #2,d0 ;d0=Linke Ecke
- moveq #2,d1 ;d1=Obere Ecke
- add.b RelativeLeftC(a5),d0 ;+Relative Linke Koordinate
- add.b RelativeTopC(a5),d1 ;+Relative Obere Koordinate
- move.w BreiteWin(a5),d2 ;d2=Fenster Breite
- subq #5,d2 ;Fenster Breite-5
- move.w HoeheWin(a5),d3 ;d3=Fenster Höhe
- subq #5,d3 ;Fenster Höhe-5
- jsr _LVORectFill(a6) ;Fülle Rechteck aus
- rts
- AddGadList
- move.l WindowHandle(a5),a0 ;a0=Fenster Addr.
- lea GadgetListe(a5),a3 ;a3=Gadget Liste für alle 10 Seiten
- lea (a3,d5.w),a3 ;d5=angewählte Seite
- move.l (a3),a1 ;a1=GadgetListe
- moveq #2,d0 ;d0=ab 2. Position
- moveq #-1,d1 ;d1=alle Gadgets
- suba.l a2,a2 ;a2=keine RequesterGadgets
- move.l INTUIBase(a5),a6 ;a6=Intuition Base
- jsr _LVOAddGList(a6) ;Füge Gadgets hinzu
- move.l (a3),a0 ;a0=GadgetListe
- move.l WindowHandle(a5),a1 ;a1=Fenster Addr.
- suba.l a2,a2 ;a2=keine Requestergadgets
- moveq #-1,d0 ;d0=alle Gadgets
- jsr _LVORefreshGList(a6) ;Zeichne GadgetListe neu
- bsr.s RefreshWin ;Zeichne Fenster neu
- rts
- ;;
- ;;
- ** Refresh Fenster
- RefreshWin
- move.l GADBase(a5),a6 ;GadTools Base
- move.l WindowHandle(a5),a0 ;Fenster Addr.
- suba.l a1,a1 ;keine TAGS
- jsr _LVOGT_RefreshWindow(a6) ;Neu Zeichnen des Fenster
- move.l WindowHandle(a5),a0 ;Fenster Addr.
- jsr _LVOGT_BeginRefresh(a6) ;Beginne mit dem Zeichnen
- move.l WindowHandle(a5),a0 ;Fenster Addr.
- moveq #DOSTRUE,d0
- jsr _LVOGT_EndRefresh(a6) ;Beende Zeichen
- rts
- ;;
- ** Fenster Öffnen
- FensterOeffne
- move.l INTUIBase(a5),a6 ;Intuition Base
- lea Fenster_Tags(pc),a1 ;Fenster Tags
- move.l GadgetListe(a5),12(a1) ;Gadget Liste
- move.l ScreenHandle(a5),60(a1) ;Screen Addr.
- lea WindowTitle(pc),a0 ;Fenster Titel
- move.l a0,4(a1)
- lea ScreenTitle(pc),a0 ;Screen Titel
- move.l a0,20(a1)
- move.w BreiteWin(a5),d0 ;Breite des Fensters
- move.w d0,30(a1)
- sub.w SCBreite(a5),d0 ;-Screen Breite
- neg.w d0 ;negieren
- asr.w #1,d0 ;/2
- move.w d0,54(a1)
- move.w HoeheWin(a5),d4 ;Höhe Fenster
- move.w d4,38(a1)
- move.w SCHoehe(a5),d0 ;Screen Höhe
- add.w #50,d0 ;+50
- sub.w d4,d0 ;Höhe Fenster - Screen Höhe
- asr.w #1,d0 ;/2
- move.w d0,46(a1)
- suba.l a0,a0 ;keine NewFenster Struktur
- jsr _LVOOpenWindowTagList(a6) ;Fenster Öffnen
- move.l d0,WindowHandle(a5) ;Fenster Addr.
- beq.b ErrorWindow ;Fehler ?
- move.l d0,a0
- move.l wd_RPort(a0),WinRPort(a5) ;Window RasrPort Addr.
- move.l 4.w,a6 ;EXECBase
- suba.l a1,a1 ;eigenen Task finden
- jsr _LVOFindTask(a6) ;Finde Task
- move.l d0,meinTask(a5) ;Task Addr.
- beq.s ErrorTask ;Fehler
- move.l d0,a0
- move.l pr_WindowPtr(a0),alterTask(a5) ;Alten Task sichern
- move.l WindowHandle(a5),pr_WindowPtr(a0) ;eigenes Fenster einsetzen
- rts
- ErrorTask
- bsr.s keinTask
- ErrorWindow
- moveq #26,d7 ;26 = konnte Fenster nicht öffnen oder Task nicht finden
- rts
- FensterSchliesse
- move.l meinTask(a5),a0 ;Task Addr.
- move.l alterTask(a5),pr_WindowPtr(a0) ;wieder alten Task einsetzen
- keinTask
- move.l INTUIBase(a5),a6 ;Intuition Base
- move.l WindowHandle(a5),a0 ;Fenster Addr.
- jsr _LVOCloseWindow(a6) ;Schliesse Fenster
- rts
- ;;
- ** GadgetListeInit
- * d0=WelcheSeite
- * a3=GadgetAddr
- * a0=Pointer für CreateGadget
- GadgetListeInit
- lea PrintPage(a5),a1 ;Text Ausgabe Data für welche Seite
- move.l PrintMarkTab(a5),(a1,d0.w) ;TextMarke
- lea GadgetPage(a5),a1 ;Gadget Liste für welche Seite
- move.l a3,(a1,d0.w) ;GadgetAddr
- lea GadgetListe(a5),a0 ;GadgetList für welche Seite
- lea (a0,d0.w),a0
- move.l GADBase(a5),a6
- jsr _LVOCreateContext(a6) ;Erschaffe Gadget Grundgerüst
- move.l d0,a0
- beq.w ErrorGadget ;Fehler ?
- rts
- ;;
- ** InitGadget
- InitGadget
- lea PrintData(a5),a1 ;Spalten Text Data
- move.l a1,PrintMarkTab(a5) ;Text Marke
- moveq #it_SIZEOF*5,d0
- LoescheTextData
- move.l #0,(a1)+ ;Lösche Speicher
- dbra d0,LoescheTextData
- move.b #0,SpalteOhneTitle(a5)
- bsr.w MenuDataInit ;MenuDaten holen
- moveq #0,d6
- move.b #0,BaM_SeitenAnzahl(a4) ;Seiten Anzahl = 0
- move.b BaM_SpaltenAnzahl(a4),d6 ;Spalten Anzahl --> d6
- tst.b d6
- bpl.s NormalSpaltenMitTitle ;d6 positive --> Spalte mit Title
- neg.b d6 ;jetzt richtige Spaltenanzahl
- move.b #1,SpalteOhneTitle(a5) ;Erkennung Spalte ohne Title
- NormalSpaltenMitTitle
- subq #1,d6
- lea GadgetAddr(a5),a3 ;GadgetAddrListe
- moveq #0,d0 ;Seite 0
- bsr.s GadgetListeInit ;Erste Seite Init
- moveq #0,d3
- SpaltenLoop
- * a0=GadgetCreatepointer
- * a3=GadgetAddressen speicher
- * a4=BangerMenu-Struct (data)
- * d3=GadgetText (später nach Schleife Ende init)
- * d6=Spalten Anzahl
- moveq #0,d0
- move.b BaM_SpaltenAnzahl(a4),d0 ;Spalten Anzahl
- tst.b d0 ;positive
- bpl.s NormalSpalten2MitTitle ;JA
- neg.b d0 ;sonst 1 Spalte
- NormalSpalten2MitTitle
- sub.b d6,d0
- subq #1,d0
- lea BaM_SpaltenLaenge(a4),a1 ;Addr. Spalten Länge
- lea (a1,d0.w),a1
- moveq #0,d5
- move.b (a1),d5 ;Spalten Länge-->d5
- move.w d5,d2 ;d2=Spalten Länge
- moveq #10,d1
- mulu.w d1,d2 ;GadgetHöhe=10 * Länge
- add.w #60,d2 ;+60
- cmp.w HoeheWin(a5),d2 ;vergleiche Höhe Fenster
- bls.s WinGroesseBeh ;Fenster ist kleiner
- move.w d2,HoeheWin(a5) ;Fenster verkleinern
- WinGroesseBeh
- tst.b d5 ;Gadgets vorhanden ?
- beq.w COLOhne ;keine
- subq #1,d5
- lea BaM_GadgetLaenge(a4),a1 ;Addr. Gadgetlänge
- lea (a1,d0.w),a1
- moveq #0,d4
- move.b (a1),d4 ;Gadgetlänge
- asl.w #3,d4 ;*8
- add.w #10,d4 ;+10
- lea UniGad(pc),a1 ;Universal NewGadget Struktur
- move.w gng_LeftEdge(a1),d1 ;d1=LinkeEcke
- move.w d4,gng_Width(a1) ;Gadgetlänge-->Gadgetbreite
- add.w d4,d1 ;LinkeEcke+Gadgetbreite
- cmp.w SCBreite(a5),d1 ;vergleiche Screenbreite
- bhi.w NeueSeiteInit ;größer Neue Seite
- SeitenRueckkehr
- lea BaM_SpaltenTitleText(a4),a1 ;Addr. SpaltenTitelText
- add.w d0,d0 ;*4 (long)
- add.w d0,d0
- lea (a1,d0.w),a1
- move.l (a1),a1 ;SpaltenTitelText
- tst.b SpalteOhneTitle(a5) ;Spalte keinen Titel ?
- bne.s GSNameRichtig ;JA
- bsr.w TextInit ;Spalten Titel Text Init
- tst.b d3
- beq.s ErsterGadNameFind ;GadgetName einstellen
- move.l d3,a2 ;a2=GadgetName
- cmp.b #$20,-1(a2) ;Leerzeichen davor ?
- beq.s TauscheReg ;JA
- ErsterGadNameFind
- tst.b (a1)+ ;im Prefs Text suchen
- bne.s ErsterGadNameFind ;noch nicht ende
- lea 1(a1),a1 ;ein Zeichen über Springen
- GSNameRichtig
- move.l a1,d3 ;d3=Addr. GadgetName
- TauscheReg
- exg a4,d3 ;a4=Addr. GadgetName
- InitGadloop
- * a0=GadgetCreatepointer
- * a3=GadgetAddressen speicher
- * a4=GadgetText (aus der Konfig)
- * d3=BangerMenuStruct
- * d5=GadgetAnzahl pro Spalte
- * d6=Spalten Anzahl
- moveq #BUTTON_KIND,d0 ;Gadget Type:Knopf
- lea UniGad(pc),a1 ;Universal NewGadgetStruktur
- move.l a4,gng_GadgetText(a1) ;GadgetText eintragen
- add.w #10,gng_TopEdge(a1) ;ObereEcke+10
- add.w #1,gng_GadgetID(a1) ;GadgetID Nr. +1
- suba.l a2,a2 ;keine TAGS
- move.l GADBase(a5),a6 ;Gadtools Base
- jsr _LVOCreateGadgetA(a6) ;Gadget erschaffen
- move.l d0,(a3)+ ;Addr. in GadgetAddressenliste eintragen
- beq.w ErrorGadget ;Fehler
- move.l d0,a0 ;a0=Addr. für nächste Gadget Erschaffung
- move.l a4,gg_UserData(a0) ;Addr. des GadgetNamen aus der Konfig
- bsr.w Return2Find ;Nächster Gadget String
- dbra d5,InitGadloop ;Alle Gadgets aus der Spalte
- lea UniGad(pc),a1 ;Universal NewGadget Struktur
- move.w #20,gng_TopEdge(a1) ;ObereEcke=20
- move.b RelativeTopC(a5),d0 ;Relative Obere Koordinate
- add.b d0,gng_TopEdge+1(a1) ;hinzu addieren
- move.w gng_Width(a1),d0 ;d0=Gadgetbreite
- add.w d0,gng_LeftEdge(a1) ;LinkeEcke+Gadgetbreite
- add.w #20,gng_LeftEdge(a1) ;+Abstand(20)
- exg d3,a4 ;d3=GadgetText a4=BangerMenuStruktur
- COLOhne
- dbra d6,SpaltenLoop ;bis alle Spalen abgearbeitet sind
- lea UniGad(pc),a1 ;Universal GadgetStruktur
- move.w gng_LeftEdge(a1),d1 ;d1=LinkeEcke
- move.w #20,gng_LeftEdge(a1) ;LinkeEcke+20
- move.b RelativeLeftC(a5),d0 ;d0=Relative Linke Koordinate
- add.b d0,gng_LeftEdge+1(a1) ;LinkeEcke+Relative Linke Koordinate
- move.w #0,gng_GadgetID(a1) ;GadgetIDNr.=0
- cmp.w BreiteWin(a5),d1 ;vergleiche Fenster Breite
- bls.s WinBreite2Beh ;FensterBreite kleiner
- move.w d1,BreiteWin(a5) ;neue Fensterbreite
- WinBreite2Beh
- tst.b BaM_SeitenAnzahl(a4) ;SeitenAnzahl=0?
- beq.s GadgetEndeInit ;JA
- bsr.w SeitenGadgetInit ;Seitengadgets einrichten
- GadgetEndeInit
- move.b #0,ZweitePage(a5) ;keine Zweite Seite
- move.l #0,(a3) ;GadgetListe abschließen
- rts
- ;;
- ** TextInit
- * a0=GadgetCreatepointer
- * a1=Zeiger auf Col Title Text
- * a3=GadgetAddressen speicher
- * a4=BangerMenu-Struct (data)
- * d0=Spalte
- * d3=GadgetText voriges Mal
- * d5=GadgetAnzahl pro Spalte
- * d6=Spalten Anzahl
- TextInit
- movem.l a0-a4/d7,-(sp) ;Register sichern
- move.w d0,d4 ;d4=Spalte
- lea UniGad(pc),a2 ;Univeral NewGadgetStruktur
- move.w gng_LeftEdge(a2),d7 ;d7=Linke Ecke
- move.w gng_Width(a2),d2 ;d2=Gadgetbreite
- move.l PrintMarkTab(a5),a2 ;a2=Text Marke
- lea it_SIZEOF(a2),a3 ;a3=Addr. Nächste IntuiTextStruktur
- move.l a3,it_NextText(a2) ;Nächste IntuiTextStruk eintragen
- move.l #$02000100,(a3) ;Texte Attribute setzen
- move.w #19,it_TopEdge(a3) ;ObereEcke=19
- move.l FontAddr(a5),it_ITextFont(a3) ;Zeichensatz eintragen
- move.l a1,it_IText(a3) ;TextString eintragen
- move.l a1,a0 ;a0=SpaltenTitelText
- TextEndeLoop
- tst.b (a1)+ ;Suche Null Byte
- bne.s TextEndeLoop
- sub.l a0,a1
- move.l a1,d0 ;d0=TextLänge
- subq #1,d0 ;Textlänge-1
- lsl.w #3,d0 ;Textlänge*8 in Pixeln
- sub.w d0,d2 ;Gadgetbreite-Textlänge
- bmi.s TextZuLang ;Textlänge zu lang
- lsr.w #1,d2 ;Restlänge/2
- TextKorritur
- add.w d2,d7 ;d7=LinkeEcke+Restlänge
- move.b RelativeLeftC(a5),d2 ;Relative Koordinate abziehen
- sub.w d2,d7
- bpl.s nichtFensterRand ;Noch positive Koordinate
- moveq #0,d7 ;Ansonsten LinkeEcke=0
- nichtFensterRand
- move.w d7,it_LeftEdge(a3) ;LinkeEcke eintragen
- move.l a3,PrintMarkTab(a5) ;Text Marker setzen
- movem.l (sp)+,a0-a4/d7 ;Alte Register wiederherstellen
- rts
- TextZuLang
- neg.w d2 ;d2=wieder positive Länge
- lsr.w #1,d2 ;Länge zu viel /2
- neg.w d2 ;d2=negative RestLänge
- tst.b d4 ;erste Spalte
- beq.s TextKorritur ;JA
- sub.b d4,TextUOFlag(a5) ;Spalte-Text unter/ober Flag
- beq.s TextKorritur ;gleich Null
- addq #1,d4 ;Nächste Spalte
- move.b d4,TextUOFlag(a5) ;Markiere Nächste Spalte
- sub.w #10,it_TopEdge(a3) ;ObereEcke-10
- bra.s TextKorritur
- ;;
- ** NeueSeiteInit
- * a0=GadgetCreatepointer
- * a3=GadgetAddressen speicher
- * a4=BangerMenu-Struct (data)
- * d0=Spalte
- * d3=GadgetText (später nach Schleife Ende init)
- * d5=GadgetAnzahl pro Spalte
- * d6=Spalten Anzahl
- NeueSeiteInit
- movem.l d0,-(sp) ;d0 sichern
- bsr.s SeitenGadgetInit ;SeitenGadgets einrichten
- tst.b d7 ;Fehler ?
- beq.s SeitenGadgOK ;Nein
- rts
- SeitenGadgOK
- lea UniGad(pc),a1 ;a1=Universal GadgetStruktur
- move.w gng_LeftEdge(a1),d0 ;d0=LinkeEcke
- cmp.w BreiteWin(a5),d0 ;vergleiche mit Fensterbreite
- bls.s WinBreiteBeh ;größer
- move.w d0,BreiteWin(a5) ;neue Fensterbreite,da kleiner
- WinBreiteBeh
- move.w #20,gng_LeftEdge(a1) ;LinkeEcke=20
- move.b RelativeLeftC(a5),d0 ;d0=Relative Linke Koordinate
- add.b d0,gng_LeftEdge+1(a1) ;LinkeEcke+Relative Linke Koordinate
- move.l #0,(a3)+ ;GadgetListe abschliessen
- add.b #4,BaM_SeitenAnzahl(a4) ;SeitenAnzahl+4 (=1 neue Seite)
- move.l PrintMarkTab(a5),a1 ;a1=TextMarker
- move.l #0,it_NextText(a1) ;keine weiteren Texte mehr
- lea it_SIZEOF(a1),a1 ;a1=Nächste Freie IntuiTextStruktur
- move.l a1,PrintMarkTab(a5) ;neue TextMarke
- moveq #0,d0
- move.b BaM_SeitenAnzahl(a4),d0 ;d0=jetzige Seite
- bsr.w GadgetListeInit ;Addr. für neue Seite einrichten
- tst.b d7 ;Fehler
- beq.s NeueGadListeOK ;Nein
- rts
- NeueGadListeOK
- movem.l (sp)+,d0 ;d0 wieder hergestellt
- bra.w SeitenRueckkehr
- ;;
- ** SeitenGadgetInit
- * a0=GadgetCreatepointer
- * d6=Spalten Anzahl (ob noche eine Seite kommt oder nicht)
- SeitenGadgetInit
- moveq #0,d4
- move.b BaM_SeitenAnzahl(a4),d4 ;d4=SeitenAnzahl
- moveq #BUTTON_KIND,d0 ;Gadget Typ:Knopf
- lea PageGads(pc),a1 ;SeitenGadgetStruktur
- tst.b ZweitePage(a5) ;Ist das die Zeite Seite?
- beq.s kein1Seite ;NEIM
- lea PaGadTags2(pc),a2 ;Gadget Wählbar Tags
- bra.s doch1Seite
- kein1Seite
- lea PaGadTags(pc),a2 ;Gadget NichtWählbar Tags
- doch1Seite
- jsr _LVOCreateGadgetA(a6) ;Gadgeterschaffen
- tst.l d0 ;Fehler
- beq.b ErrorGadget ;JA
- move.l d0,a0 ;a0=SeitenGadgetAddr.
- lea PageLAddr(a5),a1 ;vorige SeitenGadgetAddr. Liste
- lea (a1,d4.w),a1 ;für diese Seite eintragen
- move.l d0,(a1)
- moveq #BUTTON_KIND,d0 ;GadgetTyp:Knopf
- lea Page2Gads(pc),a1 ;Nächste Seite Gadget Struktur
- tst.b d6 ;Noch eine Spalte in bearbeitung ?
- bmi.s kein2Seite ;NEIN
- cmp.b #36,d4 ;10. Seite ?
- beq.s kein2Seite ;keine Neue Seite mehr
- lea PaGadTags2(pc),a2 ;Gadget Wählbar Tags
- bra.s doch2Seite
- kein2Seite
- lea PaGadTags(pc),a2 ;Gadget NichtWählbar Tags
- doch2Seite
- jsr _LVOCreateGadgetA(a6) ;Gadgeterschaffen
- tst.l d0 ;Fehler
- beq.b ErrorGadget ;JA
- move.l d0,a0
- lea PageRAddr(a5),a1 ;nächste SeitenGadgetAddr. Liste
- lea (a1,d4.w),a1
- move.l d0,(a1)
- move.b #1,ZweitePage(a5) ;ZweiteSeite vorhanden
- rts
- ;;
- ** ErrorGadget
- ErrorGadget
- bsr.s RemoveGadget ;Entferne Gadgets
- moveq #25,d7 ;25 = Gadget init Fehler
- rts
- RemoveGadget
- move.l GADBase(a5),a6 ;GadTools Base
- bsr.w MenuDataInit ;a4=BangerMenuData Struktur laden
- moveq #0,d4
- move.b BaM_SeitenAnzahl(a4),d4 ;d4=SeitenAnzahl
- GadListeFLoop
- lea GadgetListe(a5),a0 ;GadgetListe der einzelnen Seiten
- lea (a0,d4.w),a0
- move.l (a0),a0
- jsr _LVOFreeGadgets(a6) ;Freigeben
- subq #4,d4 ;Vorige Seite
- bpl.s GadListeFLoop ;Noch eine Seite
- rts
- Return2Find
- tst.b (a4)+ ;Null Byte suchen
- bne.s Return2Find
- Return1Mal
- tst.b (a4)+ ;Nochmal Null Byte suchen
- bne.s Return1Mal
- cmp.b #$20,(a4) ;Leerzeichen ?
- bne.s AltesKonfigFile ;Nein so lassen
- lea 1(a4),a4 ;noch ein Zeichen
- AltesKonfigFile
- rts
- ;;
- ** Speicher freigeben von den Einstellungen
- SpeicherPrefs
- move.l FileSpeicher(a5),a1 ;Prefs File Speicher
- move.l Filegroesse(a5),d0 ;Prefs File größe
- move.l 4.w,a6 ;EXECBase
- jsr _LVOFreeMem(a6) ;Gebe Speicher Frei
- rts
- ;;
- ** Lade Einstellungen
- LadePrefs
- move.l PrefsLoadKey(a5),d1 ;PrefsFilename
- tst.l d1 ;vorhanden
- bne.s EigenesPrefsFile ;JA!
- lea PrefsFile1(pc),a3 ;Sonst im eigenem Verzeichnis suchen
- move.l a3,d1
- EigenesPrefsFile
- move.l #MODE_OLDFILE,d2 ;nur lesend
- move.l DOSBase(a5),a6 ;DOS
- jsr _LVOOpen(a6) ;Öffne File
- move.l d0,PrefsFileHandle(a5) ;File Addr.
- bne.s OpenPrefsFile ;JA!
- lea PrefsFileName(pc),a3 ;Suche im S: Verzeichnis
- move.l a3,d1
- move.l #MODE_OLDFILE,d2 ;nur lesend
- jsr _LVOOpen(a6) ;Öffne File
- move.l d0,PrefsFileHandle(a5) ;File Addr.
- beq.s OpenFileError ;NEIN!
- OpenPrefsFile
- move.l d0,d1 ;File Addr.
- lea FIB(a5),a3 ;FIB=FileInfoBlock Struktur
- move.l a3,d2
- jsr _LVOExamineFH(a6) ;FileInfoBlock Struktur füllen
- move.l fib_Size(a3),d0 ;Filegröße
- addq #1,d0 ;+1
- move.l d0,Filegroesse(a5) ;Filegröße
- cmp.l #1,d0 ;Vergleiche mit 1
- beq.s nixPrefs ;Prefs Leer
- tst.l d0 ;=0
- beq.s nixPrefs ;PrefsLeer
- move.l #MEMF_PUBLIC!MEMF_CLEAR,d1 ;Speicher Type
- move.l 4.w,a6 ;EXECBase
- jsr _LVOAllocMem(a6) ;Reserviere Speicher
- move.l d0,FileSpeicher(a5) ;File Speicher
- beq.s ErrorFiSp ;kein Speicher
- move.l d0,a0 ;File Speicher
- move.l PrefsFileHandle(a5),d1 ;File Addr.
- move.l a0,d2 ;Buffer, wo das eingelesen wird
- move.l Filegroesse(a5),d3 ;wieviel Bytes
- move.l DOSBase(a5),a6 ;DOS
- jsr _LVORead(a6) ;File Lesen
- SchliesseFile
- move.l PrefsFileHandle(a5),d1 ;File Addr.
- move.l DOSBase(a5),a6 ;DOS
- jsr _LVOClose(a6) ;File schliessen
- rts
- ErrorFiSp
- moveq #28,d7 ;28=kein Speicher für Prefs
- bra.s SchliesseFile
- OpenFileError
- moveq #24,d7 ;24=konnte File BangerMenu.prefs nicht öffnen
- rts
- nixPrefs
- moveq #27,d7 ;27=Prefs vorhanden aber leer
- bra.s SchliesseFile
- ;;
- ** Library Öffnen + Schliessen
- LibOeffne
- move.l a5,a4 ;Intuition Vari.
- lea intname(pc),a1 ;Intuition String
- bsr.s OeffneLib ;Routine OpenLibrary
- lea dosname(pc),a1 ;Dos String
- bsr.s OeffneLib
- lea gadname(pc),a1 ;Gadtools String
- bsr.s OeffneLib
- lea gfxname(pc),a1 ;Graphics String
- bsr.s OeffneLib
- rts
- OeffneLib
- moveq #37,d0 ;Ver. 37 (Kick 2.04)
- jsr _LVOOpenLibrary(a6) ;Öffne Library
- move.l d0,(a4)+ ;Addr. Speichern
- beq.s LibError ;Fehler ?
- rts
- LibError
- moveq #22,d7 ;22 = konnte Library nicht öffnen
- rts
- LibSchliesse
- move.l 4.w,a6 ;ExecBase
- moveq #4-1,d2 ;4 Libraries Schliessen
- lea WindowHandle(a5),a4
- SchliesseLib
- move.l -(a4),a1 ;Angefangen mit GfxBase
- cmp.l #0,a1 ;Addr. gleich 0
- beq.s notOpened ;Ja dann Lib war nicht geöffnet
- jsr _LVOCloseLibrary(a6) ;Schliesse Library
- notOpened
- dbra d2,SchliesseLib ;Solange bis alle 4 Libraries geschlossen
- rts
- ;;
- ** PubScreenOeffne
- PubScreenOeffne
- tst.l MonitorKey(a5) ;MonitorTreiber
- beq.w StdPal ;Nein dann PAL
- tst.l MoniID(a5) ;MonitorID nr. vorhanden
- bne.s IDistDa ;ja
- moveq #32,d7 ;32=fehlender Parameter
- rts
- IDistDa
- move.l MonitorKey(a5),d1 ;MonitorTreiber Name
- moveq #0,d2 ;kein Input
- moveq #0,d3 ;kein Output
- move.l DOSBase(a5),a6 ;DOS Library Funktion
- jsr _LVOExecute(a6) ;Programm Ausführen
- tst.l d0 ;Programm OK ?
- bne.s NeuenMonitor ;JA
- moveq #34,d7 ;34=konnte MonitorTreiber Datei nicht laden
- rts
- NeuenMonitor
- move.l MoniID(a5),a4 ;MonitorID Nr.
- move.l (a4),d0
- move.l GFXBase(a5),a6 ;Graphics Base Funktion
- jsr _LVOFindDisplayInfo(a6) ;Finde DisplayInfoHandle zur IDNr.
- tst.l d0 ;Auflösung gefunden ?
- bne.s MonitorDa ;JA!
- moveq #35,d7 ;35=Monitor mit angebenen ID nicht gefunden
- rts
- MonitorDa
- move.l 4.w,a6 ;EXECBase
- keinSignal
- moveq #-1,d0 ;Irgenein freies Signal
- jsr _LVOAllocSignal(a6) ;Besetze Signal
- move.b d0,ScreenSignal(a5) ;SignalNr
- bmi.b keinSignal ;kein Siganlfrei warte
- lea MyScreenTags(pc),a1 ;ScreenTags
- lea PubScTitle(pc),a0 ;ScreenTitel eintragen
- move.l a0,4(a1)
- move.l MoniID(a5),a4 ;Auflösung eintragen
- move.l (a4),12(a1)
- moveq #0,d0
- move.b ScreenSignal(a5),d0 ;ScreenSignal eintragen
- move.l d0,20(a1)
- lea PenArray(pc),a0 ;PenArray Struktur eintragen
- move.l a0,28(a1)
- suba.l a0,a0 ;kein NewScreen Struktur
- move.l INTUIBase(a5),a6 ;Intuition Base Funktion
- jsr _LVOOpenScreenTagList(a6) ;Öffne neuen Screen
- move.l d0,ScreenHandle(a5) ;ScreenAddr.
- bne.s Pubvorgucken ;Screen OK!
- moveq #36,d7 ;36=konnte Screen nicht öffnen
- rts
- Pubvorgucken
- move.l d0,a0 ;ScreenAddr.
- moveq #0,d0 ;Public Screen
- jsr _LVOPubScreenStatus(a6) ;Screen Status setzen
- move.w d0,d1 ;erfolgreich ?
- beq.b keinPubScreen ;NEIN
- lea PubScTitle(pc),a0 ;ScreenTitel
- bra.s Pubgucken
- StdPal
- suba.l a0,a0 ;StartScreen (Workbench)
- Pubgucken
- move.l INTUIBase(a5),a6 ;Intuition Base Funktion
- jsr _LVOLockPubScreen(a6) ;Lock Screen
- tst.l d0 ;Fehler ?
- beq.s keinPubScreen ;JA
- move.l d0,ScreenHandle(a5) ;ScreenAddr.
- move.l d0,a0
- move.w sc_Height(a0),SCHoehe(a5) ;Screen Höhe
- move.w sc_Width(a0),SCBreite(a5) ;Screen Breite
- sub.w #20,SCBreite(a5) ;Höhe-32
- sub.w #50,SCHoehe(a5) ;Breite-80
- move.l sc_Font(a0),a1 ;FontAttr Struktur
- move.w ta_YSize(a1),d2 ;Font Größe
- add.b sc_WBorTop(a0),d2 ;+ ScreenTitleBorder Größe
- addq #1,d2 ;+1
- move.b d2,RelativeTopC(a5) ;Relative Ecke von Oben
- move.b sc_WBorTop(a0),RelativeLeftC(a5) ;Relative Ecke von Links
- suba.l a1,a1 ;keine Tags
- move.l GADBase(a5),a6 ;GadTools Base Funktion
- jsr _LVOGetVisualInfoA(a6) ;Besorge VisualInfo
- move.l d0,VisualInfo(a5) ;VisualInfo Addr.
- bne.s VisualOK ;OK!
- keinPubScreen
- moveq #23,d7 ;23=GetVisualInfo Fehler
- VisualOK
- rts
- ScreenSchliesse
- move.l GADBase(a5),a6 ;GadTools Base Funktion
- move.l VisualInfo(a5),a0 ;VisualInfo Addr.
- jsr _LVOFreeVisualInfo(a6) ;Gebe VisualInfo frei
- ScrSchliesse
- move.l INTUIBase(a5),a6 ;Intuition Base Funktion
- suba.l a0,a0 ;kein Name
- move.l ScreenHandle(a5),a1 ;Screen Struktur
- jsr _LVOUnlockPubScreen(a6) ;Unlock Screen
- cmp.b #10,d7 ;BangerMenu führt Batchdatei aus
- beq.s ScreenBleibt
- move.l ScreenHandle(a5),a0 ;ScreenAddr.
- jsr _LVOCloseScreen(a6) ;Schliesse Screen
- ScreenBleibt
- rts
- ;;
- ** LONG Daten
- SystemExeTags
- dc.l SYS_Input,0
- dc.l SYS_Output,0
- dc.l SYS_Asynch,-1
- dc.l SYS_UserShell,-1
- dc.l TAG_DONE
- Fenster_Tags
- dc.l WA_Title,0
- dc.l WA_Gadgets,0
- dc.l WA_ScreenTitle,0
- dc.l WA_Width,0
- dc.l WA_Height,0
- dc.l WA_Top,11
- dc.l WA_Left,0
- dc.l WA_PubScreen,0
- dc.l WA_IDCMP,IDCMP_MENUPICK!IDCMP_CLOSEWINDOW!IDCMP_VANILLAKEY!IDCMP_REFRESHWINDOW!BUTTONIDCMP!RAWKEY
- dc.l WA_Flags,WFLG_ACTIVATE!WFLG_SMART_REFRESH!WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET
- dc.l WA_NewLookMenus,-1
- dc.l WA_AutoAdjust,-1
- dc.l TAG_DONE
- MyScreenTags
- dc.l SA_PubName,0
- dc.l SA_DisplayID,0
- dc.l SA_PubSig,0
- dc.l SA_Pens,0
- dc.l SA_Type,WBENCHSCREEN
- dc.l SA_Width,STDSCREENWIDTH
- dc.l SA_Height,STDSCREENHEIGHT
- dc.l SA_Depth,2
- dc.l SA_SysFont,1
- dc.l SA_Overscan,OSCAN_TEXT
- dc.l TAG_DONE
- UniGad
- dc.w 20,20,0,10
- dc.l 0,0
- dc.w 0
- dc.l PLACETEXT_IN,0,0
- PageGads
- dc.w 20,5,14,12
- dc.l 0,0
- dc.w 10000
- dc.l PLACETEXT_IN,0,0
- Page2Gads
- dc.w 40,5,14,12
- dc.l 0,0
- dc.w 10001
- dc.l PLACETEXT_IN,0,0
- PaGadTags
- dc.l GA_Disabled,1
- PaGadTags2
- dc.l GT_Underscore,'_'
- dc.l TAG_DONE
- MenuTags
- dc.l GTMN_NewLookMenus,1
- dc.l TAG_END
- topaz8:
- dc.l 0
- dc.w 8
- dc.b 0,1
- PenArray
- dc.w -1
- EndeReq
- dc.l EasyStruct_SIZEOF
- dc.l 0,0,0,0
- ;;
- ** BYTE Daten
- ParaTemplate dc.b 'FN=PREFSFILENAME/K,MT=MONITORTREIBER/K,MONITORID/K/N,NOKEY/S',0
- intname INTNAME
- dosname DOSNAME
- gadname GADTOOLSNAME
- gfxname GRAFNAME
- AbReqTi dc.b 'About the program:',0
- AbReqTxt dc.b 'BangerMenu is giftware',10
- dc.b 'Autor: Andre´ Trettin',10
- dc.b ' Duwockskamp 33',10
- dc.b ' 21029 Hamburg',10
- dc.b ' 040/7246861',10
- dc.b ' Germany',10,10
- dc.b ' EMail: tretti-a@rzbt.fh-hamburg.de',10
- dc.b 'Homepage: demnächst',10,10
- dc.b 'Greeting all how sent me a EMail about BangerMenu',10
- dc.b ' and all my friends',0
- AbGadTxt dc.b 'OK',0
- ProjektName dc.b 'Project',0
- InfoName dc.b 'About',0
- QuitName dc.b 'Quit',0
- InfoTaste dc.b 'A',0
- QuitTaste dc.b 'Q',0
- PubScTitle dc.b 'Workbench Screen',0
- PageLeftTxt dc.b '_<',0
- PageRightTxt dc.b '_>',0
- inputname dc.b 'input.device',0
- PrefsFileName dc.b 'S:'
- PrefsFile1 dc.b 'BangerMenu.prefs',0
- topazFName8 dc.b 'topaz.font',0
- WindowTitle dc.b 'BangerMenu',0
- dc.b '$VER: '
- ScreenTitle dc.b 'BangerMenu 3.3 (4-Sep-96) © by Andre´ Trettin',0
- AysnchOut dc.b 'CON:0/0/640/200/BangerMenu Ausgabe/auto/wait/close',0
- ;;
-